#include<iostream>
using namespace std;

#include"tvectorporo.h"
#include"tpilaporo.h"
#include"tporo.h"

TPilaPoro::TPilaPoro()
{
   posicion = 1;
   v.Redimensionar(10);
}
TPilaPoro::TPilaPoro(const TPilaPoro &tpp)
{
   v = tpp.v;
   posicion=tpp.posicion;

}
TPilaPoro& TPilaPoro::operator=(const TPilaPoro& tpp)
{
   v = tpp.v;
   posicion=tpp.posicion;
   return *this;
}
TPilaPoro::~TPilaPoro()
{
   v.~TVectorPoro();
   posicion = 1;
}
bool TPilaPoro::operator==(const TPilaPoro& tpp)
{
   bool iguales = false;
   if( v == tpp.v )
   {
      iguales = true;
   }
   return iguales;
}
bool TPilaPoro::operator!=(const TPilaPoro& tpp)
{
   bool distintos = false;
   if( v != tpp.v )
   {
      distintos = true;
   }
   return distintos;
}
bool TPilaPoro::EsVacia() const
{
   bool vacia = false;
   if( posicion <= 1 )
   {
      vacia = true;
   }
   return vacia;
}
bool TPilaPoro::Apilar(const TPoro& p)
{
   bool apilar = false;
   if(EsVacia()==true)
   {
      v[posicion]=p;
      posicion++;
   }else
   {
      if(posicion%10 == 0)
      {
         TVectorPoro nuevo(v);
         nuevo.Redimensionar(posicion+10);
         nuevo[posicion]=p;
         posicion++;
         v.~TVectorPoro();
         v=nuevo;

      }else
      {
         v[posicion] = p;
         posicion++;
      }
   }

   return apilar;
}
void TPilaPoro::Desapilar()
{
	if(posicion>=1)
	{
		posicion--;
		if((posicion-1)%10)
		{
			v.Redimensionar(posicion);
		}
		TPoro p;
		v[posicion]=p;
	}	  
}
TPoro TPilaPoro::Cima() const
{
   TPoro cima;
   if(posicion>=1)
   {
      cima = v[posicion-1];
   }
   return cima;
}
int TPilaPoro::Longitud() const
{
   int longitud;
   longitud = v.Cantidad();
   return longitud;
}
TPilaPoro TPilaPoro::operator+(const TPilaPoro& tpp) const
{
   TPilaPoro p;
   {
      for(int i=posicion-1; i>0; i--)
      {
         p.Apilar(v[i]);
      }
      for(int i=tpp.posicion-1; i>0; i--)
      {
         p.Apilar(tpp.v[i]);
      }
   }
   return p;
}
ostream& operator<<(ostream& os,const TPilaPoro& tpp)
{
   if(tpp.EsVacia()==true)
   {
      os<<"{}";
   }else
   {
      TPoro muestra;
       for(int i=tpp.posicion-1; i > 0; i--)
       {
          if( i==tpp.posicion-1 )
          {
             os<<"{";
          }
          muestra = tpp.v[i];
          os<<muestra;
          if(i == 1 )
          {
             os<<"}";
          }else
          {
             os<<" ";
          }
       }
   }
   return os;
}
